package es.unileon.rnag.jgen.ejemplos;

import es.unileon.rnag.jgen.AlgoritmoGenetico;
import es.unileon.rnag.jgen.Cromosoma;
import es.unileon.rnag.jgen.Estrategia;
import es.unileon.rnag.jgen.genes.GenRango;
import es.unileon.rnag.jgen.operadores.CrossoverUnPunto;
import es.unileon.rnag.jgen.operadores.Operador;
import es.unileon.rnag.jgen.operadores.SeleccionRuleta;

public class MaxFuncionExamen extends Cromosoma {

	public MaxFuncionExamen() {
		super(1);
		addGen(new GenRango(0,2,0.1));
	}

	public MaxFuncionExamen(Cromosoma c) {
		super(c);
	}

	@Override
	protected double calcularAptitud() {
		double valor = (Double)getGenes()[0].getValor();
		return (-(valor*valor)+valor+3);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		Estrategia e = new Estrategia(new Operador[]{new SeleccionRuleta(1),new CrossoverUnPunto(1)});
		AlgoritmoGenetico ag = new AlgoritmoGenetico(MaxFuncionExamen.class, e, 50, 500);
		ag.evolucionar();
		Cromosoma mejor = ag.getMejor();
		System.out.println("Mejor cromosoma: " + mejor.getBitString());
		System.out.println("Maximo valor " + mejor.getAptitud() + " alcanzado en " + mejor.getGenes()[0].getValor());
	}

}
